Skip to content

Conversation

@jueunk617
Copy link
Collaborator

📌 개요

WebRTC의 연결 안정성을 향상시키기 위해 Coturn 기반의 TURN 서버를 도입하고, 보안 강화를 위해 동적 인증 방식을 적용합니다.

🔨 작업 내용

ICE 서버 조회 API 로직 수정 (/api/webrtc/ice-servers)

  • 기존 STUN 서버 목록에 더해, 요청 시마다 유효 시간이 있는 임시 TURN 서버 인증 정보를 동적으로 생성하여 응답에 포함하도록 변경했습니다.

동적 인증 정보 생성 로직 구현

  • 유효 만료 시간을 나타내는 타임스탬프를 username으로 사용합니다.
  • Coturn 서버와 공유된 shared-secret을 기반으로 HMAC-SHA1 알고리즘을 사용하여 credential(임시 비밀번호)을 생성합니다.

환경 변수를 이용한 설정 분리

  • TURN 서버의 IP 주소와 공유 비밀키 등 민감하거나 환경에 따라 바뀌는 정보를 application.yml에서 분리하여, 환경 변수(WEBRTC_TURN_SERVER_IP, WEBRTC_TURN_SHARED_SECRET)를 통해 주입받도록 수정했습니다.

테스트 코드 수정 (WebRTCApiControllerTest)

  • 컨트롤러가 환경 변수에 의존하게 됨에 따라, @TestPropertySource를 사용하여 테스트 환경에서도 필요한 프로퍼티를 설정하도록 수정했습니다.
  • API 응답에 동적으로 생성된 TURN 서버 정보가 올바른 구조로 포함되어 있는지 검증하는 테스트 케이스를 추가했습니다.

🔗 관련 이슈

Closes #255

📝 참고 사항

왜 동적 인증을 사용했는가?

  • TURN 서버는 미디어 데이터를 직접 중계하므로 상당한 네트워크 트래픽 비용을 유발할 수 있습니다. 고정된 계정 정보가 외부에 유출될 경우, 무단 사용으로 인한 비용 문제가 발생할 수 있습니다.
  • 시간제한이 있는 임시 자격 증명을 발급함으로써, 자격 증명이 유출되더라도 정해진 시간(현재 1시간)이 지나면 자동으로 무효화되어 보안을 크게 향상시킬 수 있습니다.

프론트엔드 변경 불필요

  • 프론트엔드는 백엔드가 제공하는 iceServers 배열을 그대로 사용하도록 이미 유연하게 설계되어 있습니다. 따라서 이번 백엔드 변경으로 인한 프론트엔드 코드 수정은 필요하지 않습니다.

인프라 의존성

  • 이 기능은 Terraform으로 배포된 Coturn EC2 인스턴스가 정상적으로 실행 중이어야 동작합니다.

✅ 체크리스트

  • 기능 동작 확인
  • 테스트 코드 작성
  • 문서/주석 추가 및 최신화

@github-actions github-actions bot changed the title Feat: TURN 서버 지원 추가 Feat: TURN 서버 지원 추가 (#255) Oct 14, 2025
@jueunk617
Copy link
Collaborator Author

WebRTC 문제 해결 후 merge 하겠습니다 ~~

@jueunk617 jueunk617 merged commit 07bf9c9 into dev Oct 14, 2025
3 checks passed
@github-actions github-actions bot deleted the Feat/255 branch October 14, 2025 10:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants